﻿using System.IO;
using System.Text;
using System.Text.RegularExpressions;

namespace DM_TOOLS.Tools
{
    public static class FileOperator
    {
        public static bool FileIsUsed(this string fileFullName)
        {
            bool result = false;
            //判断文件是否存在，如果不存在，直接返回 false
            if (!File.Exists(fileFullName))
            {
                result = true;
            }//end: 如果文件不存在的处理逻辑
            else
            {//如果文件存在，则继续判断文件是否已被其它程序使用
                //逻辑：尝试执行打开文件的操作，如果文件已经被其它程序使用，则打开失败，抛出异常，根据此类异常可以判断文件是否已被其它程序使用。
                FileStream fileStream = null;
                try
                {
                    fileStream = File.Open(fileFullName, FileMode.Open, FileAccess.Read, FileShare.None);
                    result = false;
                }
                catch (IOException ex)
                {
                    result = true;
                    Console.WriteLine(ex.Message + ex.Source);
                }
                catch (Exception)
                {
                    result = true;
                }
                finally
                {
                    if (fileStream != null)
                    {
                        fileStream.Close();
                    }
                }
            }
            return result;
        }

        public static bool FileIsZero(this string fileFullName)
        {
            bool result = false;
            //判断文件是否存在，如果不存在，直接返回 true
            if (!File.Exists(fileFullName))
            {
                result = true;
            }//end: 如果文件存在的处理逻辑
            else
            {
                FileInfo fi;
                fi = new FileInfo(fileFullName);
                if (fi.Length / 1024 > 0)
                {
                    result = false;
                }
                else
                {
                    result = true;
                }
            }
            return result;
        }

        /// <summary>
        /// 获取某个路径下所有的csv文件并按名称排序
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static FileInfo[] GetExtensionFiles(this string filePath,string extension)
        {
            DirectoryInfo root = new DirectoryInfo(filePath);
            if (!root.Exists)
            {
                root.Create();
            }

            // 自动补充扩展名前的 "."
            string searchPattern = "*." + extension;

            var files = root.GetFiles(searchPattern, SearchOption.TopDirectoryOnly)
                            .OrderBy(f => f.Name)
                            .ToArray();

            return files ?? Array.Empty<FileInfo>();
        }
        public static FileInfo[] GetLatestextFiles(this string directorypath, string ext)
        {
            DirectoryInfo root = new DirectoryInfo(directorypath);
            if (!root.Exists)
            {
                root.Create();
            }
            //getfiles始终按照文件名排序
            FileInfo[] files = root.GetFiles(ext);
            if (files.Length > 0)
            {
                var fc = new FileComparer();
                Array.Sort(files, fc);
            }
            return files;

        }
        public static string GetMessagefromLogfile(this string logfile)
        {
            var jsonString = string.Empty;
            if (File.Exists(logfile))
            {
                StreamReader sr = new StreamReader(logfile, Encoding.UTF8);
                string line = string.Empty;
                while ((line = sr.ReadLine()) != null)
                {
                    jsonString += line;
                }
                sr.Close();
                return jsonString;
            }
            else { return string.Empty; }
        }
        /// <summary>
        /// 把原始名称改为小写，去掉空格和N
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string ReName(this string data)
        {
            return data.Replace("_", "").Replace("N", "").Replace(" ", "").ToLower();
        }
        /// <summary>
        /// 把逗号改为英文
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string ReComma(this string data)
        {
            return data.Replace("，", ",");
        }
        /// <summary>
        /// 从文件名中提取下划线后的数字部分（如 can_0.dbc → 0）
        /// </summary>
        public static uint GetNumberAfterUnderscore(this string filePath)
        {
            // 取文件名（带扩展名）
            string fileName = Path.GetFileName(filePath);
            // 正则匹配：下划线后跟数字，忽略扩展名
            var match = Regex.Match(fileName, @"_(\d+)\.");
            if (match.Success)
            {
                return uint.Parse(match.Groups[1].Value);
            }
            // 没匹配到返回默认值 100
            return 100;
        }
    }
}
